package com.demo.java.OD301_350.OD317;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【阿里巴巴找黄金宝箱(2)(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146106292
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入的字符串并按逗号分割得到字符串数组
        String[] strings = scanner.nextLine().split(",");

        // 创建一个映射表，用于统计每个数字的出现次数
        Map<String, Integer> map = new HashMap<>();

        // 统计每个数字的出现次数
        for (String str : strings) {
            map.put(str, map.getOrDefault(str, 0) + 1);
        }

        // 将映射表的键值对转换为列表，并按值的降序排序
        List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort((a, b) -> b.getValue() - a.getValue());

        // 箱子的个数
        int count = 0;
        // 半数箱子（因为是半数及以上，所以需要向上取整）
        int half = (int) Math.ceil((double) strings.length / 2);
        // 结果数组，用于存储数量
        int res = 0;

        // 遍历排序后的列表，统计选择的箱子
        for (Map.Entry<String, Integer> entry : list) {
            count += entry.getValue();
            res++;

            // 如果箱子个数达到或超过半数，则停止
            if (count >= half) {
                break;
            }
        }

        // 输出最小箱子数
        System.out.println(res);
    }
}